#ifndef __ws2812_h__
#define __ws2812_h__


/*********************** 
 * 注意：
 *1. PWM模式需要使用PWM2 Mode,因为外部使用了一个三极管进行电平转换，对应的电平会反向
 *2. PWM使用DMA进行输出时，需要改动hal，使用UP溢出请求DMA，外设地址设置为对应CH的CCR,但hal库并没有设置对应的函数
     因此自己写了一个对应的函数(在ws2812_port.c/h中)
*/
#include "stdint.h"
#include "string.h"
#include "stdbool.h"

#define ONE_PULSE                   (59)                           //1 码计数个数
#define ZERO_PULSE                  (29)                           //0 码计数个数
#define RESET_PULSE_NUM             (80)                           //80 复位电平个数（不能低于40）
#define WS2812_SINGLE_DATA_LEN      (24)                           //led 长度，单个需要24个字节

typedef struct 
{
    uint16_t num;
    uint16_t* buff;
    // uint32_t buff_len; //记录数组长度，防止越界
    uint8_t finish_flag;
} s_ws2812; 
typedef s_ws2812* p_ws2812; //ws2812结构体指针
uint8_t WS2812_Init(p_ws2812 ws2812, uint16_t num);
uint8_t WS2812_UnInit(p_ws2812 ws2812);
uint8_t WS2812_ClearAllPixel(p_ws2812 ws2812);
uint8_t WS2812_SetPixel(p_ws2812 ws2812, uint16_t num, uint8_t R, uint8_t G, uint8_t B);
uint8_t ws2812_Send_Data(p_ws2812 ws2812);



#endif /* ws2812_h */

